package com.ruoyi.pcj.utils.pcj;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.mashuai.utils.base.MsAssertUtils;
import com.mashuai.utils.base.MsEmptyUtils;
import com.mashuai.utils.toolkit.core.msMp.MsDb;
import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.pcj.constant.TipConstant;
import com.ruoyi.pcj.domain.PcjDefConfig;

import java.util.List;

/**
 * 普创家业务一些工具类
 *
 * @ClassName: PcjUtils
 * @Author : mashuai
 * @Description: TODO
 */
public class PcjUtils {


    /**
     * 获取系统参数值
     * @param code 编码
     * */
    public static PcjDefConfig getConfig(String code) {
        LambdaQueryWrapper<PcjDefConfig> qw = Wrappers.lambdaQuery();
        qw.eq(PcjDefConfig::getCode, code);
        List<PcjDefConfig> list = MsDb.list(qw, PcjDefConfig.class);
        MsAssertUtils.objIsNull(list, "当前code：【" + code + "】未在系统参数配置中！");
        return list.get(0);
    }

    /**
     * 获取当前用户的单据，必须保证用户id字段为user_id即可
     *
     * @param cla
     * @param <T>
     * @return
     */
    public static <T extends BaseEntity> List<T> getDataByCurUser(Class<T> cla) {
        Long userId = SecurityUtils.getUserId();
        QueryWrapper<T> qw = new QueryWrapper<>();
        qw.eq("user_id", userId);
        return MsDb.list(qw, cla);
    }

    /***
     * 获取某张表中指定用户的所有单据
     * **/
    public static <T extends BaseEntity> List<T> getDataByUserId(Long userId, Class<T> cla) {
        QueryWrapper<T> qw = new QueryWrapper<>();
        qw.eq("user_id", userId);
        return MsDb.list(qw, cla);
    }


    /***
     * 获取指定用户的单据，并且根据顺序号升序排序，必须保证用户id字段为user_id即可seq_no
     */
    public static <T extends BaseEntity> List<T> getDataByCurUserSeqNoAsc(Long userId, Class<T> cla) {
        MsAssertUtils.objIsNull(userId, TipConstant.LOGIN_FAIL);
        QueryWrapper<T> qw = new QueryWrapper<>();
        qw.eq("user_id", userId);
        qw.orderByAsc("seq_no");
        return MsDb.list(qw, cla);
    }
}
